#ifndef CPP_LOG_H
#define CPP_LOG_H

#include <cstdio>

#define CVTE_DEBUG                  1
#define CVTE_DEBUG_RXLOG            0

#if CVTE_DEBUG
    #if CVTE_DEBUG_RXLOG
    #include <rxlog.h>
    #define LOG_TAG                 "L"
    #define cvte_log_debug(...)     rxlogd(LOG_TAG, __VA_ARGS__)
    #define cvte_log_info(...)      rxlogi(LOG_TAG, __VA_ARGS__)
    #define cvte_log_warn(...)      rxlogw(LOG_TAG, __VA_ARGS__)
    #define cvte_log_error(...)     rxloge(LOG_TAG, __VA_ARGS__)
    #define cvte_log_fatal(...)     rxlogf(LOG_TAG, __VA_ARGS__)
    #define cvte_log(...)           do{ char log[128] = {0}; snprintf(log, sizeof(log), __VA_ARGS__); rxlogd(LOG_TAG, "%s #[%s]", __func__, log);} while(0)
    #define cvte_log_func(...)      rxlogd(LOG_TAG, __func__)
    #define cvte_log_simple(...)    rxlogr(LOG_TAG, __VA_ARGS__)
    #else
    #define cvte_log_debug(...)     do { printf("D/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log_info(...)      //do { printf("I/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log_warn(...)      do { printf("W/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log_error(...)     do { printf("E/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log_fatal(...)     do { printf("F/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log(...)           do { printf("I/%s: ", __func__); printf(__VA_ARGS__);  printf("\r\n"); } while (0)
    #define cvte_log_func(...)      do { printf("I/%s:\r\n", __func__); } while (0)
    #define cvte_log_simple(...)    printf(__VA_ARGS__)
    #endif
#else
    #define cvte_log_debug(...)
    #define cvte_log_info(...)
    #define cvte_log_warn(...)
    #define cvte_log_error(...)
    #define cvte_log_fatal(...)
    #define cvte_log(...)
    #define cvte_log_func(...)
    #define cvte_log_simple(...)
#endif /*# if CVTE_DEBUG */

#endif /* CPP_LOG_H */